<?php
/**
 *  * 系统-受国家计算机软件著作权保护 - !
 * =========================================================
 * Copy right 2018-2025 成都海之心科技有限公司, 保留所有权利。
 * ----------------------------------------------
 * 官方网址: http://www.ohyu.cn
 * 这不是一个自由软件！在未得到官方有效许可的前提下禁止对程序代码进行修改和使用。
 * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
 * =========================================================
 * User: ohyueo
 * Date: 2024/5/30
 * Time: 14:17
 */
namespace app\install\controller;
use think\facade\View;
use think\facade\Db;

class Index extends ApiBase
{
    public function index()
    {   
        //是否可以安装
        $isinstall=1;
        //查询是否已经安装了 如果根目录有.ohyueo文件则已经安装
        if(file_exists('.ohyueo')){
            $isinstall=0;
        }
        View::assign('isinstall',$isinstall);
        //网址
        $url=getweburl();
        View::assign('url',$url);
        //查询.env文件里面的数据库信息
        $envpath = app()->getRootPath().'.env';
        $env = file_get_contents($envpath);
        $env = explode("\n",$env);
        $dbuser = '';
        $dbpass = '';
        $dbname = '';
        foreach($env as $k=>$v){
            if(strpos($v,'DB_NAME')!==false){
                $dbname = explode('=',$v)[1];
            }elseif(strpos($v,'DB_USER')!==false){
                $dbuser = explode('=',$v)[1];
            }elseif(strpos($v,'DB_PASS')!==false){
                $dbpass = explode('=',$v)[1];
            }
        }
        View::assign('dbuser',$dbuser);
        View::assign('dbpass',$dbpass);
        View::assign('dbname',$dbname);
        return View::fetch();
    }
    //安装
    public function install()
    {
        // //对应一个旧的数据库前缀
        // $oldprefix = 'auto_';
        // //定义一个数据库前缀
        // $prefix = 'escort_';
        //  //引入GenerApi
        //  $gen=new GenerApi($prefix,$oldprefix);
        //  $res=$gen->createApiModel();
        //  //控制器方法
        //  $gen->createapiController();
        //  //app/handle方法
        //  $gen->replaceHandler();
        //  //app/listener方法
        //  $gen->replaceListener();
        //   $gen->replaceValidate();

        //  //第三步：生成admin模型以及文件
        // //引入GenerAdmin
        // $gen=new GenerAdmin($prefix,$oldprefix);
        // $gen->createadminModel();
        // //控制器方法
        // $gen->createadminController();

        // //第四步：生成.ohyueo文件
        // file_put_contents('.ohyueo', 'ohyueo');
        // exit;
        if(request()->isPost()){
            ///测试用
            //对应一个旧的数据库前缀
            // $oldprefix = 'auto_';
            // //定义一个数据库前缀
            // $prefix = 'escort_';
            //  //引入GenerApi
            //  $gen=new GenerApi($prefix,$oldprefix);
            //  $res=$gen->createApiModel();
            //  //控制器方法
            //  $gen->createapiController();
            //  //app/handle方法
            //  $gen->replaceHandler();
            //  //app/listener方法
            //  $gen->replaceListener();
            //   $gen->replaceValidate();

            //  //第三步：生成admin模型以及文件
            // //引入GenerAdmin
            // $gen=new GenerAdmin($prefix,$oldprefix);
            // $gen->createadminModel();
            // //控制器方法
            // $gen->createadminController();

            // //第四步：生成.ohyueo文件
            // file_put_contents('.ohyueo', 'ohyueo');
            // exit;
            ///测试用 end


            //接受数据库
            $dbuser = input('dbuser');//数据库用户名
            $dbpass = input('dbpass');//数据库密码
            $dbname = input('dbname');//数据库名称
            if(!$dbuser || !$dbpass || !$dbname){
                return $this->message('数据库信息不能为空',[],0);
            }
            //查询目录下面的.env文件里面的数据库信息
            $envpath = app()->getRootPath().'.env';
            $env = file_get_contents($envpath);
            $env = explode("\n",$env);
            $newenv = '';
            foreach($env as $k=>$v){
                if(strpos($v,'DB_NAME')!==false){
                    $newenv .= "DB_NAME=".$dbname."\n";
                }elseif(strpos($v,'DB_USER')!==false){
                    $newenv .= "DB_USER=".$dbuser."\n";
                }elseif(strpos($v,'DB_PASS')!==false){
                    $newenv .= "DB_PASS=".$dbpass."\n";
                }else{
                    $newenv .= $v."\n";
                }
            }
            file_put_contents($envpath, $newenv);
            //测试数据库是否链接成功
            $dsn = "mysql:host=localhost;dbname={$dbname}";
            try {
                //链接成功
            } catch (\PDOException $e) {
                return $this->message('数据库链接失败，请仔细检查。',[],0);
            }
            $result = Db::query("SHOW DATABASES LIKE '{$dbname}'");
            if (empty($result)) {
                // 数据库不存在
                return $this->message('数据库不存在或链接错误，请仔细检查。',[],0);
            }
            
            //查询是否是空库
            $tables = Db::query("SHOW TABLES FROM `{$dbname}`");
            if($tables){
                return $this->message('数据库不是空库，请重新选择,或删除数据。',[],0);
            }

            //接受项目名称
            $proname = input('proname');//项目名称
            if(!$proname){
                return $this->message('项目名称不能为空',[],0);
            }
            //项目名称只能是英文字母
            if(!preg_match('/^[a-zA-Z]+$/', $proname)){
                return $this->message('项目名称只能是英文字母',[],0);
            }
            //查询是否已经安装了 如果根目录有.ohyueo文件则已经安装
            if(file_exists('.ohyueo')){
                return $this->message('已经安装了',[],0);
                exit;
            }
            //对应一个旧的数据库前缀
            $oldprefix = 'escort_';
            //定义一个数据库前缀
            $prefix = $proname.'_';
            //第一步：导入数据库
            //引入OperSql
            $sql=new OperSql($prefix,$oldprefix);
            $res=$sql->importSql();
            if($res['code']==0){
                return $this->message('导入失败',[],0);
            }

            try {
                //第二步：生成api模型以及文件
                //引入GenerApi
                $gen=new GenerApi($prefix,$oldprefix);
                $gen->createApiModel();
                //控制器方法
                $gen->createapiController();
                //app/handle方法
                $gen->replaceHandler();
                //app/listener方法
                $gen->replaceListener();
                //app/validate方法
                $gen->replaceValidate();

                //第三步：生成admin模型以及文件
                //引入GenerAdmin
                $gen=new GenerAdmin($prefix,$oldprefix);
                $gen->createadminModel();
                //控制器方法
                $gen->createadminController();

                //第四步：生成.ohyueo文件
                file_put_contents('.ohyueo', 'ohyueo');
                
                $code=1;
                $msg='安装成功';
            } catch (\Exception $e) {
                $code=0;
                $error=$e->getMessage();
                $msg='安装失败'.$error;
                $rearr=[];
            }
            return $this->message($msg,[],$code);
        }
    }

}
